package cn.itcast.controller;

import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/user")
public class UserController {

    /**
     *  1.1返回值为:字符串
     *
     * @return
     */
    @RequestMapping("/testString")
    public String testString(Model model) {
        System.out.println("testString方法执行了........");
        // 模拟从数据库中查询出User对象
        User u = new User();
        u.setUsername("阿波罗");
        u.setPassword("123");
        u.setAge(18);
        // model对象
        model.addAttribute("user",u);
        return "success";
    }

    /**
     *  1.2.返回值为:void
     *
     * @return
     */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("testVoid方法执行了........");
        // 1. 编写请求转发的程序
        // request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
        // 2. 重定向
        // Redirect无法访问/WEB-INF/目录
        // response.sendRedirect(request.getContextPath()+"/index.jsp");
        // 3.通过response指定响应结果
        // 3.1 解决中文乱码问题
        // a.response使用的字符编码
        response.setCharacterEncoding("utf-8");
        // b.设置页面的字符编码(Response Headers属性Content-Type: text/html;charset=utf-8)
        response.setContentType("text/html;charset=utf-8");
        // 3.2 直接进行响应
        response.getWriter().write("你好");
        return;
    }

    /**
     *  1.3.返回值为:ModelAndView
     *
     * @return
     */
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView() {
        System.out.println("testVoid方法执行了........");
        ModelAndView mv = new ModelAndView();
        // 模拟从数据库中查询出User对象
        User u = new User();
        u.setUsername("宙斯");
        u.setPassword("999");
        u.setAge(18);
        mv.addObject("user", u);
        // 跳转到哪个页面(forward)
        mv.setViewName("success");
        return mv;
    }

    /**
     *  SpringMVC框架提供的转发和重定向
     *      使用关键字
     * @return
     */
    @RequestMapping("testForwardOrRedirect")
    public String testForwardOrRedirect() {
        System.out.println("testForwardOrRedirect方法执行了...");
        // 一.forward转发
        // 注意,此时视图解析器不能帮你拼串, 因此我们需要写全部名称
        // return "forward:/WEB-INF/pages/success.jsp";

        // 二.redirect重定向
        // 注意:我们不需要写虚拟路径,SpringMVC底层已帮助我们实现了
        return "redirect:/index.jsp";
    }

/*    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user) {
        System.out.println("testAjax方法执行了....");
        // 客户端发送ajax的请求，传的是json字符串，后端把json字符串封装到user对象中
        System.out.println(user);
        // 做响应,模拟查询数据库
        user.setUsername("wuli");
        // 做响应
        return user;
    }    */

    @RequestMapping("/testAjax")
    public void  testAjax(@RequestBody User  user) {
        System.out.println("testAjax方法执行了....");
        // 客户端发送ajax的请求，传的是json字符串，后端把json字符串封装到user对象中
        System.out.println(user);
        // 做响应,模拟查询数据库
        // 做响应
        // return user;
    }


}
